昨天有分享過:每台裝置一個內部 IP、全家一個公有 IP、分享器那張兩行的路由表、一群號碼怎麼寫
今天把它們搬到 AWS 上吧!前幾天有分享過像是一個活動報名網站有 Web 1、Web 2 的 EC2,跟之後的資料庫,要得放進去「網路」,也就是今天的主角
在建立 EC2 主機的過程中,會有個位置來選擇「子網路」
關於 AWS 跟自己家網路的差異白話文如下?:
| 你家 | AWS 名稱 | 白話 |
|---|---|---|
| 自己家的網路 | VPC | 你在雲端劃出來的一塊網路,也就是社區。自己建的 VPC 沒主動接,就沒有對外 |
你家那間房(192.168.1.x) |
Subnet | 社區裡的一間房,主機放這裡;一間房只在一個 AZ |
| 分享器裡那張決定往哪走的表 | Route Table(路由表) | 這間房的資料要往哪走 |
| 分享器接出去到電信商的那條線 | Internet Gateway(IGW) | 社區通往 Internet 的門 |
| 內部 IP/公有 IP | Private IP/Public IP | 也就是前面講的兩個 IP 號碼 |
而 VPC(Virtual Private Cloud),就是今天的主角~
昨天練習的那三台機器換上 AWS 的名字,順便多補一台你想開卻開不出來的:

event-vpc,號碼 10.0.0.0/16
public-az1,Web 主機放這裡。它的內部 IP 10.0.0.24 是 AWS 從這間房的範圍發的,昨天是分享器發號碼,在 AWS 是 Subnet 發的~private-az2,而資料庫則是放這裡,IP 設計為 10.0.254.24
10.0.3.24 是新補的:你會發現想開這台,但開不出來。因為 VPC 的號碼範圍夠切 256 個 Subnet,但你只建自己需要的,這篇只建了 10.0.0.0/24 和 10.0.254.0/24 兩個,其他範圍先留著。AWS 開任何一台機器都要先選一個已經存在的 Subnet,10.0.3.x 沒有對應的 Subnet,自然就沒有地方放這台機器10.1.1.24 是另一個 VPC 的機器,兩個 VPC 預設互不相通。像是你帳號裡本來就有一個 AWS 給的 default VPC,號碼是 172.31.0.0/16(官方文件),以及自己建的 event-vpc 這樣一來就建立好兩個社區整組皆起來,就像如下的內容:

一個 VPC 裡面兩個 Subnet,並且各掛一張路由表,一個 Internet Gateway 掛在社區邊上通到 Internet。而左邊那張路由表有一條線連到大門,這條線也就是整篇的重點
回到活動報名網站,我們接著一步步來蓋看看:
event-vpc,範圍 10.0.0.0/16
public-az1 是 10.0.0.0/24 放 AZ 1,之後都放 ec2 的 Web 主機。private-az2 是 10.0.254.0/24 放 AZ 2,之後放資料庫。public-az1 。接下來也可以打開「自動指派公有 IPv4」的開關,private-az2 不開,他是我們之後做內部資料庫的素材,只是先將內部網址打點好~event-igw,接到 event-vpc 上public-rt、private-rt,各掛對應的 subnet為什麼要兩間?Web 主機要讓使用者連得到,放可對外的那間;資料庫放只在內部的那間,外面的人根本沒有路可以摸到它
這裡有一件一定要記住的事:建 Subnet 的時候,AWS 不會有「public/private」這個選項
兩間房建完,除了網段、AZ 等等,沒有任何一個欄位寫著 public 或 private
在第 4 步的路由表,也就是昨天家裡那張路由表的 AWS 版本。路由表管的是這間房的資料往外送要走哪條路;別人能不能進來
還記得昨天家裡那張表只有兩行嗎?AWS 版操作的話也是也是兩行:
| 目的地 | 寫法 | 白話 |
|---|---|---|
| 同一個社區裡 | 10.0.0.0/16 → local |
社區內直接送,同社區其他房間都到得了。local 不是你打的字,是 AWS 填好的固定值,建表時自動加 |
| 其他所有地方 | 0.0.0.0/0 → IGW |
不在社區裡的,全部往外部大門送 |
注意範圍不一樣:家裡那張表第一行只管一間房(192.168.1),AWS 的 local 管理整個社區
所以 public-rt 兩行,local 加一條往大門;private-rt 只有 local 那一行。少了那一行,資料就只能在社區裡繞,繞不出跑到能對外的竟
接著把 public-rt 掛到 public-az1、private-rt 關聯到 private-az2,
AWS 官方文件對 Public Subnet 也曾定義過:一間房掛的路由表有一條路通到 IGW,它就是 Public Subnet;沒有,就是 Private Subnet
回頭看上面那張全景圖,應該多少有些輪廓了?
來看一個同事的操作。他有一間房,原本叫 public-app,掛的路由表只有 local 那一行。他做了三件事:把房間名字改成 private-app;打開「自動指派公有 IPv4」;確認 VPC 已經掛了 IGW
然後問你:這間現在算 public 還是 private?
自動指派公有 IPv4 在管的事情是「之後在這間房開的主機,要不要自動拿一個公有 IP」。它是位址設定,已經開著的主機也不會補拿
VPC 掛了 IGW 只代表大門裝了,這間房的路由表沒有那一行,資料還是不知道怎麼走到大門
**唯一的依據,是它掛的路由表有沒有 0.0.0.0/0 → IGW。**官方說法是「有一條路通到 IGW」,這系列都用 0.0.0.0/0 這種寫法

所以答案是:它還是 Private Subnet。要變 public,是去路由表加那一行
反過來講,「Public」也只是可以對外,不是一定連得到。要真的連得到,還要兩件事:主機要有公有 IP、門鎖要放行(Security Group)
VPC、Subnet、路由表、IGW 這些很佛通通都不收錢,官方有寫到「使用 VPC 沒有額外費用」
會收錢的有兩樣,這篇都不會碰到:
AWS 官方的建議可以整理成幾條:
/16,Subnet 切 /24
畫出來就是這樣,實線是這篇蓋的兩間,虛線是之後跨 AZ 再加的。這也是雲端工程師平常在做的事之一:先把網段切好,再決定每個服務住哪間房

最後小結一下~
| 重點 | 記住這句 |
|---|---|
| VPC 與 Subnet | VPC 是你在雲端劃的一塊網路,主機放在裡面的 Subnet。Subnet 就是「子網路」,一間房只在一個 AZ |
| 路由表 | 家裡那張路由表的 AWS 版,管往外部推送。local 是社區內 |
| Public 怎麼判 | 只看這間房掛的路由表有沒有 0.0.0.0/0 → IGW;名字、自動指派 IP、VPC 掛 IGW 都不算 |
| 可對外≠連得到 | 還要主機有公有 IP、門鎖放行;蓋這些全部 $0,NAT 和公有 IPv4 才收費 |
下次如果你聽到「這間是 public subnet」嗎??
相信你直覺就會想問:
0.0.0.0/0 → IGW 那一行?希望這篇讓你看懂主機到底放在哪,我們下篇見 :D